<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/Python-3.6.2/Include/codecs.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/Python-3.6.2/Include/codecs.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="macros_noref.html#_UHlfQ09ERUNSRUdJU1RSWV9IXzA_"><span class="b">Py_CODECREGISTRY_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="macros_noref.html#_UHlfQ09ERUNSRUdJU1RSWV9IXzA_"><span class="b">Py_CODECREGISTRY_H</span></a>
<a name="3" /><span class="False">       3:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="4" /><span class="False">       4:</span> <span class="m">extern</span> <span class="e">&quot;C&quot;</span> <span class="f">{</span>
<a name="5" /><span class="True">       5:</span> <span class="f">#</span><span class="n">endif</span>
<a name="6" /><span class="True">       6:</span> 
<a name="7" /><span class="True">       7:</span> <span class="k">/* ------------------------------------------------------------------------</span>
<a name="8" /><span class="True">       8:</span> <span class="k"></span>
<a name="9" /><span class="True">       9:</span> <span class="k">   Python Codec Registry and support functions</span>
<a name="10" /><span class="True">      10:</span> <span class="k"></span>
<a name="11" /><span class="True">      11:</span> <span class="k"></span>
<a name="12" /><span class="True">      12:</span> <span class="k">Written by Marc-Andre Lemburg (mal@lemburg.com).</span>
<a name="13" /><span class="True">      13:</span> <span class="k"></span>
<a name="14" /><span class="True">      14:</span> <span class="k">Copyright (c) Corporation for National Research Initiatives.</span>
<a name="15" /><span class="True">      15:</span> <span class="k"></span>
<a name="16" /><span class="True">      16:</span> <span class="k">   ------------------------------------------------------------------------ */</span>
<a name="17" /><span class="True">      17:</span> 
<a name="18" /><span class="True">      18:</span> <span class="k">/* Register a new codec search function.</span>
<a name="19" /><span class="True">      19:</span> <span class="k"></span>
<a name="20" /><span class="True">      20:</span> <span class="k">   As side effect, this tries to load the encodings package, if not</span>
<a name="21" /><span class="True">      21:</span> <span class="k">   yet done, to make sure that it is always first in the list of</span>
<a name="22" /><span class="True">      22:</span> <span class="k">   search functions.</span>
<a name="23" /><span class="True">      23:</span> <span class="k"></span>
<a name="24" /><span class="True">      24:</span> <span class="k">   The search_function&apos;s refcount is incremented by this function. */</span>
<a name="25" /><span class="True">      25:</span> 
<a name="26" /><span class="True">      26:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyCodec_Register</span><span class="f">(</span>
<a name="27" /><span class="True">      27:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">search_function</span>
<a name="28" /><span class="True">      28:</span>        <span class="f">)</span><span class="f">;</span>
<a name="29" /><span class="True">      29:</span> 
<a name="30" /><span class="True">      30:</span> <span class="k">/* Codec registry lookup API.</span>
<a name="31" /><span class="True">      31:</span> <span class="k"></span>
<a name="32" /><span class="True">      32:</span> <span class="k">   Looks up the given encoding and returns a CodecInfo object with</span>
<a name="33" /><span class="True">      33:</span> <span class="k">   function attributes which implement the different aspects of</span>
<a name="34" /><span class="True">      34:</span> <span class="k">   processing the encoding.</span>
<a name="35" /><span class="True">      35:</span> <span class="k"></span>
<a name="36" /><span class="True">      36:</span> <span class="k">   The encoding string is looked up converted to all lower-case</span>
<a name="37" /><span class="True">      37:</span> <span class="k">   characters. This makes encodings looked up through this mechanism</span>
<a name="38" /><span class="True">      38:</span> <span class="k">   effectively case-insensitive.</span>
<a name="39" /><span class="True">      39:</span> <span class="k"></span>
<a name="40" /><span class="True">      40:</span> <span class="k">   If no codec is found, a KeyError is set and NULL returned.</span>
<a name="41" /><span class="True">      41:</span> <span class="k"></span>
<a name="42" /><span class="True">      42:</span> <span class="k">   As side effect, this tries to load the encodings package, if not</span>
<a name="43" /><span class="True">      43:</span> <span class="k">   yet done. This is part of the lazy load strategy for the encodings</span>
<a name="44" /><span class="True">      44:</span> <span class="k">   package.</span>
<a name="45" /><span class="True">      45:</span> <span class="k"></span>
<a name="46" /><span class="True">      46:</span> <span class="k"> */</span>
<a name="47" /><span class="True">      47:</span> 
<a name="48" /><span class="True">      48:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="49" /><span class="True">      49:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyCodec_Lookup</span><span class="f">(</span>
<a name="50" /><span class="True">      50:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span>
<a name="51" /><span class="True">      51:</span>        <span class="f">)</span><span class="f">;</span>
<a name="52" /><span class="True">      52:</span> 
<a name="53" /><span class="True">      53:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">_PyCodec_Forget</span><span class="f">(</span>
<a name="54" /><span class="True">      54:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span>
<a name="55" /><span class="True">      55:</span>        <span class="f">)</span><span class="f">;</span>
<a name="56" /><span class="True">      56:</span> <span class="f">#</span><span class="n">endif</span>
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="True">      58:</span> <span class="k">/* Codec registry encoding check API.</span>
<a name="59" /><span class="True">      59:</span> <span class="k"></span>
<a name="60" /><span class="True">      60:</span> <span class="k">   Returns 1/0 depending on whether there is a registered codec for</span>
<a name="61" /><span class="True">      61:</span> <span class="k">   the given encoding.</span>
<a name="62" /><span class="True">      62:</span> <span class="k"></span>
<a name="63" /><span class="True">      63:</span> <span class="k">*/</span>
<a name="64" /><span class="True">      64:</span> 
<a name="65" /><span class="True">      65:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyCodec_KnownEncoding</span><span class="f">(</span>
<a name="66" /><span class="True">      66:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span>
<a name="67" /><span class="True">      67:</span>        <span class="f">)</span><span class="f">;</span>
<a name="68" /><span class="True">      68:</span> 
<a name="69" /><span class="True">      69:</span> <span class="k">/* Generic codec based encoding API.</span>
<a name="70" /><span class="True">      70:</span> <span class="k"></span>
<a name="71" /><span class="True">      71:</span> <span class="k">   object is passed through the encoder function found for the given</span>
<a name="72" /><span class="True">      72:</span> <span class="k">   encoding using the error handling method defined by errors. errors</span>
<a name="73" /><span class="True">      73:</span> <span class="k">   may be NULL to use the default method defined for the codec.</span>
<a name="74" /><span class="True">      74:</span> <span class="k"></span>
<a name="75" /><span class="True">      75:</span> <span class="k">   Raises a LookupError in case no encoder can be found.</span>
<a name="76" /><span class="True">      76:</span> <span class="k"></span>
<a name="77" /><span class="True">      77:</span> <span class="k"> */</span>
<a name="78" /><span class="True">      78:</span> 
<a name="79" /><span class="True">      79:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_Encode</span><span class="f">(</span>
<a name="80" /><span class="True">      80:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span>
<a name="81" /><span class="True">      81:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="82" /><span class="True">      82:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="83" /><span class="True">      83:</span>        <span class="f">)</span><span class="f">;</span>
<a name="84" /><span class="True">      84:</span> 
<a name="85" /><span class="True">      85:</span> <span class="k">/* Generic codec based decoding API.</span>
<a name="86" /><span class="True">      86:</span> <span class="k"></span>
<a name="87" /><span class="True">      87:</span> <span class="k">   object is passed through the decoder function found for the given</span>
<a name="88" /><span class="True">      88:</span> <span class="k">   encoding using the error handling method defined by errors. errors</span>
<a name="89" /><span class="True">      89:</span> <span class="k">   may be NULL to use the default method defined for the codec.</span>
<a name="90" /><span class="True">      90:</span> <span class="k"></span>
<a name="91" /><span class="True">      91:</span> <span class="k">   Raises a LookupError in case no encoder can be found.</span>
<a name="92" /><span class="True">      92:</span> <span class="k"></span>
<a name="93" /><span class="True">      93:</span> <span class="k"> */</span>
<a name="94" /><span class="True">      94:</span> 
<a name="95" /><span class="True">      95:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_Decode</span><span class="f">(</span>
<a name="96" /><span class="True">      96:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span>
<a name="97" /><span class="True">      97:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="98" /><span class="True">      98:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="99" /><span class="True">      99:</span>        <span class="f">)</span><span class="f">;</span>
<a name="100" /><span class="True">     100:</span> 
<a name="101" /><span class="True">     101:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="102" /><span class="True">     102:</span> <span class="k">/* Text codec specific encoding and decoding API.</span>
<a name="103" /><span class="True">     103:</span> <span class="k"></span>
<a name="104" /><span class="True">     104:</span> <span class="k">   Checks the encoding against a list of codecs which do not</span>
<a name="105" /><span class="True">     105:</span> <span class="k">   implement a str&lt;-&gt;bytes encoding before attempting the</span>
<a name="106" /><span class="True">     106:</span> <span class="k">   operation.</span>
<a name="107" /><span class="True">     107:</span> <span class="k"></span>
<a name="108" /><span class="True">     108:</span> <span class="k">   Please note that these APIs are internal and should not</span>
<a name="109" /><span class="True">     109:</span> <span class="k">   be used in Python C extensions.</span>
<a name="110" /><span class="True">     110:</span> <span class="k"></span>
<a name="111" /><span class="True">     111:</span> <span class="k">   XXX (ncoghlan): should we make these, or something like them, public</span>
<a name="112" /><span class="True">     112:</span> <span class="k">   in Python 3.5+?</span>
<a name="113" /><span class="True">     113:</span> <span class="k"></span>
<a name="114" /><span class="True">     114:</span> <span class="k"> */</span>
<a name="115" /><span class="True">     115:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyCodec_LookupTextEncoding</span><span class="f">(</span>
<a name="116" /><span class="True">     116:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="117" /><span class="True">     117:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">alternate_command</span>
<a name="118" /><span class="True">     118:</span>        <span class="f">)</span><span class="f">;</span>
<a name="119" /><span class="True">     119:</span> 
<a name="120" /><span class="True">     120:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyCodec_EncodeText</span><span class="f">(</span>
<a name="121" /><span class="True">     121:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span>
<a name="122" /><span class="True">     122:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="123" /><span class="True">     123:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="124" /><span class="True">     124:</span>        <span class="f">)</span><span class="f">;</span>
<a name="125" /><span class="True">     125:</span> 
<a name="126" /><span class="True">     126:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyCodec_DecodeText</span><span class="f">(</span>
<a name="127" /><span class="True">     127:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">object</span><span class="f">,</span>
<a name="128" /><span class="True">     128:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="129" /><span class="True">     129:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="130" /><span class="True">     130:</span>        <span class="f">)</span><span class="f">;</span>
<a name="131" /><span class="True">     131:</span> 
<a name="132" /><span class="True">     132:</span> <span class="k">/* These two aren&apos;t actually text encoding specific, but _io.TextIOWrapper</span>
<a name="133" /><span class="True">     133:</span> <span class="k"> * is the only current API consumer.</span>
<a name="134" /><span class="True">     134:</span> <span class="k"> */</span>
<a name="135" /><span class="True">     135:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyCodecInfo_GetIncrementalDecoder</span><span class="f">(</span>
<a name="136" /><span class="True">     136:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">codec_info</span><span class="f">,</span>
<a name="137" /><span class="True">     137:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="138" /><span class="True">     138:</span>        <span class="f">)</span><span class="f">;</span>
<a name="139" /><span class="True">     139:</span> 
<a name="140" /><span class="True">     140:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">_PyCodecInfo_GetIncrementalEncoder</span><span class="f">(</span>
<a name="141" /><span class="True">     141:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">codec_info</span><span class="f">,</span>
<a name="142" /><span class="True">     142:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="143" /><span class="True">     143:</span>        <span class="f">)</span><span class="f">;</span>
<a name="144" /><span class="True">     144:</span> <span class="f">#</span><span class="n">endif</span>
<a name="145" /><span class="True">     145:</span> 
<a name="146" /><span class="True">     146:</span> 
<a name="147" /><span class="True">     147:</span> 
<a name="148" /><span class="True">     148:</span> <span class="k">/* --- Codec Lookup APIs --------------------------------------------------</span>
<a name="149" /><span class="True">     149:</span> <span class="k"></span>
<a name="150" /><span class="True">     150:</span> <span class="k">   All APIs return a codec object with incremented refcount and are</span>
<a name="151" /><span class="True">     151:</span> <span class="k">   based on _PyCodec_Lookup().  The same comments w/r to the encoding</span>
<a name="152" /><span class="True">     152:</span> <span class="k">   name also apply to these APIs.</span>
<a name="153" /><span class="True">     153:</span> <span class="k"></span>
<a name="154" /><span class="True">     154:</span> <span class="k">*/</span>
<a name="155" /><span class="True">     155:</span> 
<a name="156" /><span class="True">     156:</span> <span class="k">/* Get an encoder function for the given encoding. */</span>
<a name="157" /><span class="True">     157:</span> 
<a name="158" /><span class="True">     158:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_Encoder</span><span class="f">(</span>
<a name="159" /><span class="True">     159:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span>
<a name="160" /><span class="True">     160:</span>        <span class="f">)</span><span class="f">;</span>
<a name="161" /><span class="True">     161:</span> 
<a name="162" /><span class="True">     162:</span> <span class="k">/* Get a decoder function for the given encoding. */</span>
<a name="163" /><span class="True">     163:</span> 
<a name="164" /><span class="True">     164:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_Decoder</span><span class="f">(</span>
<a name="165" /><span class="True">     165:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span>
<a name="166" /><span class="True">     166:</span>        <span class="f">)</span><span class="f">;</span>
<a name="167" /><span class="True">     167:</span> 
<a name="168" /><span class="True">     168:</span> <span class="k">/* Get an IncrementalEncoder object for the given encoding. */</span>
<a name="169" /><span class="True">     169:</span> 
<a name="170" /><span class="True">     170:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_IncrementalEncoder</span><span class="f">(</span>
<a name="171" /><span class="True">     171:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="172" /><span class="True">     172:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="173" /><span class="True">     173:</span>        <span class="f">)</span><span class="f">;</span>
<a name="174" /><span class="True">     174:</span> 
<a name="175" /><span class="True">     175:</span> <span class="k">/* Get an IncrementalDecoder object function for the given encoding. */</span>
<a name="176" /><span class="True">     176:</span> 
<a name="177" /><span class="True">     177:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_IncrementalDecoder</span><span class="f">(</span>
<a name="178" /><span class="True">     178:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="179" /><span class="True">     179:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="180" /><span class="True">     180:</span>        <span class="f">)</span><span class="f">;</span>
<a name="181" /><span class="True">     181:</span> 
<a name="182" /><span class="True">     182:</span> <span class="k">/* Get a StreamReader factory function for the given encoding. */</span>
<a name="183" /><span class="True">     183:</span> 
<a name="184" /><span class="True">     184:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_StreamReader</span><span class="f">(</span>
<a name="185" /><span class="True">     185:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="186" /><span class="True">     186:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">stream</span><span class="f">,</span>
<a name="187" /><span class="True">     187:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="188" /><span class="True">     188:</span>        <span class="f">)</span><span class="f">;</span>
<a name="189" /><span class="True">     189:</span> 
<a name="190" /><span class="True">     190:</span> <span class="k">/* Get a StreamWriter factory function for the given encoding. */</span>
<a name="191" /><span class="True">     191:</span> 
<a name="192" /><span class="True">     192:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_StreamWriter</span><span class="f">(</span>
<a name="193" /><span class="True">     193:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">encoding</span><span class="f">,</span>
<a name="194" /><span class="True">     194:</span>        <span class="b">PyObject</span> <span class="f">*</span><span class="b">stream</span><span class="f">,</span>
<a name="195" /><span class="True">     195:</span>        <span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">errors</span>
<a name="196" /><span class="True">     196:</span>        <span class="f">)</span><span class="f">;</span>
<a name="197" /><span class="True">     197:</span> 
<a name="198" /><span class="True">     198:</span> <span class="k">/* Unicode encoding error handling callback registry API */</span>
<a name="199" /><span class="True">     199:</span> 
<a name="200" /><span class="True">     200:</span> <span class="k">/* Register the error handling callback function error under the given</span>
<a name="201" /><span class="True">     201:</span> <span class="k">   name. This function will be called by the codec when it encounters</span>
<a name="202" /><span class="True">     202:</span> <span class="k">   unencodable characters/undecodable bytes and doesn&apos;t know the</span>
<a name="203" /><span class="True">     203:</span> <span class="k">   callback name, when name is specified as the error parameter</span>
<a name="204" /><span class="True">     204:</span> <span class="k">   in the call to the encode/decode function.</span>
<a name="205" /><span class="True">     205:</span> <span class="k">   Return 0 on success, -1 on error */</span>
<a name="206" /><span class="True">     206:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="m">int</span><span class="f">)</span> <span class="b">PyCodec_RegisterError</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">name</span><span class="f">,</span> <span class="b">PyObject</span> <span class="f">*</span><span class="b">error</span><span class="f">)</span><span class="f">;</span>
<a name="207" /><span class="True">     207:</span> 
<a name="208" /><span class="True">     208:</span> <span class="k">/* Lookup the error handling callback function registered under the given</span>
<a name="209" /><span class="True">     209:</span> <span class="k">   name. As a special case NULL can be passed, in which case</span>
<a name="210" /><span class="True">     210:</span> <span class="k">   the error handling callback for &quot;strict&quot; will be returned. */</span>
<a name="211" /><span class="True">     211:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_LookupError</span><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="b">name</span><span class="f">)</span><span class="f">;</span>
<a name="212" /><span class="True">     212:</span> 
<a name="213" /><span class="True">     213:</span> <span class="k">/* raise exc as an exception */</span>
<a name="214" /><span class="True">     214:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_StrictErrors</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">exc</span><span class="f">)</span><span class="f">;</span>
<a name="215" /><span class="True">     215:</span> 
<a name="216" /><span class="True">     216:</span> <span class="k">/* ignore the unicode error, skipping the faulty input */</span>
<a name="217" /><span class="True">     217:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_IgnoreErrors</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">exc</span><span class="f">)</span><span class="f">;</span>
<a name="218" /><span class="True">     218:</span> 
<a name="219" /><span class="True">     219:</span> <span class="k">/* replace the unicode encode error with ? or U+FFFD */</span>
<a name="220" /><span class="True">     220:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_ReplaceErrors</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">exc</span><span class="f">)</span><span class="f">;</span>
<a name="221" /><span class="True">     221:</span> 
<a name="222" /><span class="True">     222:</span> <span class="k">/* replace the unicode encode error with XML character references */</span>
<a name="223" /><span class="True">     223:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_XMLCharRefReplaceErrors</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">exc</span><span class="f">)</span><span class="f">;</span>
<a name="224" /><span class="True">     224:</span> 
<a name="225" /><span class="True">     225:</span> <span class="k">/* replace the unicode encode error with backslash escapes (\x, \u and \U) */</span>
<a name="226" /><span class="True">     226:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_BackslashReplaceErrors</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">exc</span><span class="f">)</span><span class="f">;</span>
<a name="227" /><span class="True">     227:</span> 
<a name="228" /><span class="True">     228:</span> <span class="f">#</span><span class="n">if</span> <span class="f">!</span><span class="b">defined</span><span class="f">(</span><span class="b">Py_LIMITED_API</span><span class="f">)</span> <span class="f">||</span> <span class="b">Py_LIMITED_API</span><span class="f">+</span><span class="c">0</span> <span class="f">&gt;=</span> <span class="c">0x03050000</span>
<a name="229" /><span class="True">     229:</span> <span class="k">/* replace the unicode encode error with backslash escapes (\N, \x, \u and \U) */</span>
<a name="230" /><span class="True">     230:</span> <a href="macros_ref.html#_UHlBUElfRlVOQ18w"><span class="b">PyAPI_FUNC</span></a><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="f">)</span> <span class="b">PyCodec_NameReplaceErrors</span><span class="f">(</span><span class="b">PyObject</span> <span class="f">*</span><span class="b">exc</span><span class="f">)</span><span class="f">;</span>
<a name="231" /><span class="True">     231:</span> <span class="f">#</span><span class="n">endif</span>
<a name="232" /><span class="True">     232:</span> 
<a name="233" /><span class="True">     233:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">Py_LIMITED_API</span>
<a name="234" /><span class="True">     234:</span> <a href="macros_ref.html#_UHlBUElfREFUQV8w"><span class="b">PyAPI_DATA</span></a><span class="f">(</span><span class="m">const</span> <span class="m">char</span> <span class="f">*</span><span class="f">)</span> <span class="b">Py_hexdigits</span><span class="f">;</span>
<a name="235" /><span class="True">     235:</span> <span class="f">#</span><span class="n">endif</span>
<a name="236" /><span class="True">     236:</span> 
<a name="237" /><span class="False">     237:</span> <span class="f">#</span><span class="n">ifdef</span> <span class="b">__cplusplus</span>
<a name="238" /><span class="False">     238:</span> <span class="f">}</span>
<a name="239" /><span class="True">     239:</span> <span class="f">#</span><span class="n">endif</span>
<a name="240" /><span class="True">     240:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* !Py_CODECREGISTRY_H */</span>
<a name="241" /><span class="True">     241:</span> </pre>
  </body>
</html>
